package com.forever7776.life.core.mapper.blog;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.forever7776.life.core.common.vo.*;
import com.forever7776.life.core.entity.blog.Blog;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * <p>
 * 博客主表 Mapper 接口
 * </p>
 *
 * @author kz
 * @since 2018-02-10
 */
public interface BlogMapper extends BaseMapper<Blog> {

    /**
     * 假删除博客
     *
     * @param id
     * @return
     */
    @Update("update blog set status = -1 where id=#{id}")
    int delete(@Param("id") Integer id);

    /**
     * 查询博客活跃用户排行榜
     *
     * @return
     */
    List<UserBaseInfoVO> selectBlogActiveUser(@Param("limit") Integer limit);

    /**
     * 根据条件查询5条博客数据
     *
     * @param blogId
     * @param type
     * @param blogTypeId
     * @return
     */
    List<UserBlogVO> selectUserBlogByCondition(@Param("blogId") Integer blogId, @Param("type") Integer type, @Param("blogTypeId") Integer blogTypeId);

    /**
     * 后台管理系统查询博客数据
     *
     * @param page
     * @param vo
     * @return
     */
    List<UserBlogVO> selectAllUserBlogByAdmin(@Param("page") Page<UserBlogVO> page, @Param("vo") UserBlogAdminSearchVO vo);

    /**
     * 前端博客页面查询博客数据
     *
     * @param page
     * @param type
     * @param blogTypeId
     * @return
     */
    List<UserBlogVO> selectAllUserBlogByFront(@Param("page") Page<UserBlogVO> page, @Param("type") Integer type, @Param("blogTypeId") Integer blogTypeId, @Param("userId") String userId);


    /**
     * 修改博客审核状态
     *
     * @param blogId
     * @param type
     * @return
     */
    @Update("update blog set type=#{type} where id=#{blogId}")
    Integer updateType(@Param("blogId") Integer blogId, @Param("type") Integer type);

    /**
     * 推荐博客
     *
     * @param blogId
     * @param recommendType
     * @return
     */
    @Update("update blog set recommend_type=#{recommendType} where id=#{blogId}")
    Integer updateRecommendType(@Param("blogId") Integer blogId, @Param("recommendType") Integer recommendType);

    /**
     * 修改博客是否开放状态
     *
     * @param userId
     * @param blogId
     * @param openup
     * @return
     */
    @Update("update blog set openup=#{openup} where user_id=#{userId} and id=#{blogId}")
    Integer updateOpenUp(@Param("userId") String userId, @Param("blogId") Integer blogId, @Param("openup") Integer openup);

    /**
     * 查看博客详情，查看用户最新一条博客数据，不包括正在查看的博客
     *
     * @param userId
     * @param blogId
     * @return
     */
    @Select("select id blogId,title blogTitle from blog where user_id=#{userId} and openup=1 and status=1 and type=0 and id !=#{blogId} order by insert_date desc limit 1")
    UserLastBlogVO selectUserLastBlog(@Param("userId") String userId, @Param("blogId") Integer blogId);

    /**
     * 查看博客详情，查看5条热门博客
     *
     * @param blogId
     * @return
     */
    List<UserBlogBaseVO> selectFiveHotBlog(@Param("blogId") Integer blogId);

    /**
     * 根据博客审核状态查询数量
     *
     * @param type
     * @return
     */
    @Select("select count(status) from blog where type=#{type}")
    Integer selectCountByBlogType(@Param("type") Integer type);
}
